Devlog 2 - Systemics

Devlog 1 was… in April? Nearly 3 months ago? Oh no!

Much has changed since the last devlog: I’ve moved, had some brief but nonetheless unfun medical occurrences, went to Berlin, got alot of playtesting feedback, and instituted some rather major changes as a result. What hasn’t changed is my employment status (I would loooove to do some design work on your thing, I promise I'm actually quite good at it!) , but that also meant getting to make major progress on Inoculate, which has been hugely rewarding.

However, I did manage to talk myself into the idea that said progress was not... aesthetically appealing. But I am taking the advice of my friend / fellow (much more consistent) blogger V Buckenham who told me that I can, quote “afford to put like 1/10th of the ass into my posts”. This is good advice, indeed a less pressured writing process was one of the main goals of this blog in the first place, and so I’m writing this now!

To save myself and you from something way too long (even by my standards), I am just going to breakdown the big pieces of progress I’ve made on Inoculate re: the basic gameplay loop, framing device and some of underpinning systems, and not even attempt to cover the more visuals / narrative oriented work I’ve been doing recently. See this as a sort of lost late May / early June devlog.

As a final programming note: There will be a playable demo of the game up on Itch by early August! If the Game Jam version was a proof of concept, consider this demo a light vertical slice, featuring new levels, new mechanics, and an entire narrative / visual overhaul.

I’m still figuring out exactly what the future of this project looks like, methods of funding and distribution included. But that also means confirming that the base fundamentals of Inoculate are enjoyable, both for me as a dev and for others as players, and this demo will help lock a lot of that in place. Expect to hear a bit more about the demo soon, and if you don’t, please harass me about it.


Blowback

The main brunt of why this has taken so long to write (beyond, again, life events) starts in Berlin, specifically Amaze, where I handed around a build of the game to anyone who wanted to play it. The results were really useful, with the overall gameplay and conceit being well received, but with some important issues to address. One was onboarding, which was very expected: The tutorial is out of date, the game doesn’t allow for pausing, etc, etc.

This onboarding difficult relates back to probably my favourite piece of advice from Frank Lantz: Even if you know something is bad, get it playtested, because the emotional turmoil of seeing someone else crash into a known problem is what forces you to resolve it. I knew that the game did not onboard well, but oh boy do I hate seeing people struggle with it. I’m tackling this from multiple vantages at the moment, mainly via dramatically increasing the amount of player feedback and visual signalling, and I have a relatively major overhaul to how time works in the pipeline that will also help massively. And I've now fully excised the old tutorial from the game, though a replacement tutorial remains on hold for now.

Yet there was another concern that came up that was less anticipated, even as I warned of it coming in the last blog post: I would deliver my opening spiel about the game, that it was a node-based RTS about spreading political ideology, and then people would play the game and see the nodes… but not much political ideology.

Essentially, my goal of making the game more abstract had succeeded, but with the contemporary build lacking clear, contextual information, people mostly had to just trust me that the game was about politics. Some of the ideas that came up were ones I had already anticipated: Increased contextual information at the beginning or end of a level, a live twitter-style feed, etc. Yet also a struggle came from just scope: Were all 4 factions always in play? The map implies this even if the game does not! And equally, who is the player anyways? Even if you buy into the idea of ideological warfare, who is waging the war?

All ***** is politiical

I want to give specific credit here to Alan Hazelden, who listened to me as I discussed these issues and had such a great answer re: how to address the above issues that it has genuinely revolutionized the lens through which I look at the game.

He suggested that that player, functionally, played the role of a sort of for-hire influencer, one could be brought on to theorhetically any side in any situation, to influence a given network in their clients favour. What this means is that Inoculate’s politiical focus is, put simply, no longer limited to politics. We can have a level about boosting the notoriety of a celebrity, or shutting down negative perceptions of a specific brand, or pushing the conspiratorially minded towards certain theories, or really anything where multiple world-views come into conflict, while also keeping all of the previous ideas around supporting previous political parties. With this, ideas for a campaign structure, narrative exposition and framing, and level pacing all quickly slotted into place, not all of which I’ll get into here. But needless to say, I am hugely excited by this direction for Inoculate, with it not so much being an expansion of scope so much as an expansion of reach.

That said, implementing this notion systemically was still a little complex. Essentially, I had to take systems that had been built to account for 4 factions with set ideologies and identities, rip all of those up to make the systems be able to account for any number of factions, with completely bespoke identities, on a per level basis, and then also re-build those aforementioned factions for the levels that required them within the new system. This was not necessarily glamourous, I truly have nothing to show for it other than just like… rewritten code, but it was actually very well-timed, as it allowed me to massively refactor the code-base for better performance and legibility. Things may mostly look the same at this stage (there are new colours now?), but they do now run better, and the future of the game is very bright indeed.

Inoculate, now in Pink and Purple

Local Politics

Another huge mechanical change that this new framing device unlocked, and one that will actually go to help some of the issues players had in learning the game, are custom political axes (a better term will be found later). Previously, all levels featured the entirety of the political axes displayed on screen, even when massive swaths of it would essentially be untouched by both player and AI opponents. This heavily amplified the aforementioned difficulties with onboarding, as players didn’t know at a glance which parts of the spectrum they needed to care about, and more generally, it just meant that each level would feel same-y, even in case where they were played differently.

Now, I can assign certain parts of the axes to be blocked off. This, combined with the previous change to generalize factions, means the actual structure and movement around levels can be completely customized on a per level basis. You can see a few examples below, with the opening level now having only a small, horizontal line of movement allowed to focus the player’s actions, while a latter level feature a more diagonal layout, and finally an “anti-centrist” layout that I’d love to use in a fringe or conspiracy theory oriented level. I would like levels or factions to have some custom art in the future, so it’s not just me covering up the base political axes, but this will get the job done for now.

Multiple game maps as described above

Multi-Level Politicking Scheme

In other systemic oriented news, I finally implemented an idea I’ve had for a while : Layers. Levels can now have 2 layers for actions and node connections, Online and Offline, with offline connections generally being rarer and offline actions generally being slower but more powerful. This combines with another new change, where actions are cancelled if an acting nodes faction changes mid-action (i.e, a node acting on behalf of a right wing party won’t continue to perform a right wing action if they stop being right-wing).

I’ve yet to fully grasp the impact this has on player strategy, in large part because I have yet to fully design levels that meaningfully utilize the split structure, but it’s at the very least another interesting tool for me AND the player to have at our disposal, and early work with it has been really fun, further building out interesting interpersonal relationships between nodes and thus, interesting strategies.

Two versions of the same game map, the one on the left showing an isolated influencer node, while the one on the right showing a specific chain of offline connections that allow you to reach it

Campaign Strategy

Finally, I did some work on the AI, though I imagine I will be continuing to write statements to that effect well into the future. Beyond just getting the AI to properly factor in everything above, it is also now undeniably smarter in the moves it makes. And while my work on it is far from done, but I thought I’d at least illuminate how I’ve been going about this thus far.

The biggest change is the way the AI system evaluates possible actions. Upon hitting a pre-determined time interval per faction (which can be adjusted based on desired difficulty), the game scores every theoretical action that all nodes that belong to that faction can take. Some actions are discarded immediately after a series of checks if we consider them to be non-viable (for example, if a node cannot be moved up, we do not check if moving it up would technically still be a good action).

We then assign each viable action a score based on a variety of measurable aspects, such as: how many nodes the receiving node is connected to, or how close the receiving node is to being allied with the acting nodes faction, or if acting on the receiving node would pull it out of an existing faction. We also check to see if a given move would put the receiving node in an enemy faction, which is obviously quite bad, but was also an extremely common occurrence prior to this being implemented. After scoring each action, the AI manager performs whatever action has the highest score and the timer is reset.

There are some current blindspots I’ll need to address in future. It’s not great at pathfinding around blockers in the political axes, which is fine for now, but will be more of a problem depending on the style of board. It doesn’t fully track how spread out the beliefs of the actors within itself are, so it can sometimes be a very broad tent coalition, not to it’s benefit. It’d also be nice to give the AI a bit more of a memory so that it could, for example, determine if it’s continually trying the same action over and over again and if so, force it to try a different strategy (just for the sake of variety and preventing any game from getting stuck). Yet, even with all of that said, the AI is undeniably smarter than it’s ever been, and the system for handling it’s decision making is much more robust and easy to add to than it’s ever been. In fact, it being smart has even started having notable impact on the design of the game.

A fun anecdote to end on: A specific level featuring two factions, one with an influencer node connected to some of the player’s starting nodes, had the AI constantly trying to capture a specific node right near the start of the level, one I also wanted to capture. The AI completely ignored every other node on the board, and only fought me over this single node the entire match. While I would occasionally gain access to the node and be able to advance, the enemy would constantly re-capture this essential node, blocking off any further faction connections up the map and really slowing down my progress. After about 10 minutes of frustration with just why the AI was being so intense about this one specific node, I realized that well, of course it was: It has accurately recongized a chokepoint (i.e that I could not advance in the game without capturing that specific node), and thus it has deemed that claiming it is the most worthwhile action it could do, moreso than even trying to attack my main node directly, which might leave it vulnerable. The AI wasn’t being dumb, it was my encounter design that was flawed.

I was able to resolve this issue by essentially shifting the choke point away from the player’s side of the map and towards the enemies end. The enemy AI still recognized it as important and would claim it early, but the result was that the player and enemy would have a larger encounter across the board, and the fight for the choke point felt more meaningfully and better tilted in the player’s favour to prevent frustration. So while there is still work to be done, having an AI that is now smart enough that it can meaningfully inform how I do level design is really going to make going forward and continuing to design levels just that much more viable, and more fun.


And with that… I think this post is done for now! There’s actually a fair amount I didn’t cover above that meaningfully aligns with this kind of systemic work that’s just a little too low-key to mention here (alot of colour-coding and UI / UX updates to make the board much more legible especially). There are also plenty of other, quite large things that will be mentioned in the future.

But the goal is that you will hear about all these things smaller, hopefully in smaller, more frequent chunks.I think the next one will likely cover a pretty big visual conversion I’ve been doing the last few weeks (teaser below), and even some of the underlying systemic work that’s gone into making all that work, while the one after will be about the narrative work I’m in the process of doing. The one after that.. Well that might be the one with a link to a demo! Very exciting times.

Truly, Inoculate has been a real labour of love, both a game that feels deeply, weirdly personal to me while also being like nothing I thought I’d ever make. I am learning so much from the process of making it of course, but there is also just something radical about realizing I have the skillset required to pursue this game and make it a reality. To even have just accomplish what I have managed so far is really just a joy. And if you are reading this, thank you so much for being a part of that.

TInoculate.... on a greybox computer screen??? With lighting???